{
Miranda IM: the free IM client for Microsoft* Windows*

Copyright 2000-2003 Miranda ICQ/IM project,
all portions of this codebase are copyrighted to the people
listed in contributors.txt.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
}

{$IFNDEF M_CLUI}
{$DEFINE M_CLUI}

{<</
    this header was created for use for v0.1.1.0, most of it's UI related
    stuff and you probably don't need to call it, see m_clist.inc instead.
    -- There are some functions that were implemented in v0.1.2.0 though
/>>}

const
  {
    wParam : 0
    lParam : 0
    Affects: Returns a window handle for the contact list window, see notes
    Returns: ""
    Notes  : This call has a very specific purpose internally Miranda
             and shouldn't be used gratuitously, in almost all cases
             there's another call to do whatever it is that you're
             trying to do.
  }
  MS_CLUI_GETHWND:PAnsiChar = 'CLUI/GetHwnd';

  //get ContactTree hwnd
  MS_CLUI_GETHWNDTREE:PAnsiChar = 'CLUI/GetHwndTree';

  {
    wParam : new status
    lParam : null terminated string to a protocol ID
    Affects: Change the protocol specific status indicators, see notes!
    Returns: 0 on success, [non zero] on failure
    Notes  : protocol modules don't want to call this, they want
             clist/protocolstatuschanged instead
  }
  MS_CLUI_PROTOCOLSTATUSCHANGED:PAnsiChar = 'CLUI/ProtocolStatusChanged';

  {
    wParam : Handle to a group
    lParam : 1 or 0
    Affect : A new group was created, add it to the list, see notes
    Notes  : lParam is set to 1 or 0 if the user just created
             the group or not.
             -
             this is also called when the contact list is being rebuilt,
             new groups are always created with the name 'New group'
  }
  MS_CLUI_GROUPADDED:PAnsiChar = 'CLUI/GroupCreated';

  {
    wParam : HCONTACT
    lParam : ICON_ID
    Affect : Change the icon for a contact, see notes
    Returns: 0 on success, [non zero] on failure
    Notes  : ICON_ID is an offset in the imagelist, see clist/geticonsimagelist
  }
  MS_CLUI_CONTACTSETICON:PAnsiChar = 'CLUI/ContactSetIcon';

  {
    wParam : HCONTACT
    lParam : 0
    Affect : Remove a contact from the list, see notes
    Returns: 0 on success, [non zereo] on failure
    Notes  : this contact is NOT actually being deleted, since if
             a contact goes offline while 'hide offline' option is sset,
             this service will be called then ALSO
  }
  MS_CLUI_CONTACTDELETED:PAnsiChar = 'CLUI/ContactDeleted';

  {
    wParam : HCONTACT
    lParam : ICON_ID
    Affect : Add a contact to the list, see note
    returns: 0 on success, [non zero] on failure
    Notes  : the caller processes the 'hide offline' setting, so the callee
             should not do further processing based on the value of this setting
             -
             WARNING: this will be called to re-add a contact when they come
             online if 'hide offline' is on, but it cannot determine if
             the contact is already on the list, so you may get requests to
             add a contact when it is already on the list, which you should ignore.
             -
             You'll also get this whenever an event is added for a contact,
             since if the contact was offline, it needs to be shown to
             display the mesage, even if 'hide offlines' is on.
             -
             you should not resort the list on this call, a seperate resort
             request will be sent.
             -
             ICON_ID is an offset in the image list, see clist/geticonsimagelist

  }
  MS_CLUI_CONTACTADDED:PAnsiChar = 'CLUI/ContactAdded';

  {
    wParam : HCONTACT
    lParam : 0
    Affect : Reename a contact in the lists, see notes
    Returns: 0 on success, [non zero] on failure
    Notes  : You should not re-sort the list on this call, a separate resort
             request will be sent, you can get the new name from clist/getcontactdisplayname
  }
  MS_CLUI_CONTACTRENAMED:PAnsiChar = 'CLUI/ContactRenamed';

  {
    wParam : 0
    lParam : 0
    Affect : Start a rebuild of the contact list, see notes
    Returns: 0 on success, [non zero] on failure
    Notes  : this is the cue to clear the existing content of the list
             expect to get a series of :

             clui/groupadded
             clui/contactadded
             clui/resortlist
  }
  MS_CLUI_LISTBEGINREBUILD:PAnsiChar = 'CLUI/ListBeginRebuild';

  {
    wParam : 0
    lParam : 0
    Affect : End a rebuild of the contact list, see notes
    Returns: 0 on success, [non zero] on error
    Notes  : if you dissplayed an hourglass in beginbuild, set it back
             here, you do not need to explicitly sort the list
  }
  MS_CLUI_LISTENDREBUILD:PAnsiChar = 'CLUI/ListEndRebuild';

  {
    wParam : 0
    lParam : 0
    Affect : Sort the contact list now, see notes
    Returns: 0 success, [non zero] on failure
    Notes  : Sorts are buffered so you won't get this message lots of times
             if the lists needs to be resorted many times rapidly
  }
  MS_CLUI_SORTLIST:PAnsiChar = 'CLUI/SortList';

  {
    wParam : CLUICAPS_*
    lParam : 0
    Affect : Gets a load of capabilites for the loaded CLUI, see notes
    Returns: the requested value, 0 of wParam is unknown --
             if this service is not implemented it is assumed all return
             values will be 0.
    Version: v0.1.2.1+
  }
{
  CLUIF2_PLUGININFO       = 1; // returns pointer to plugininfo
  CLUIF2_CLISTTYPE        = 2; // the genaration of list in chronologic
                               // modern layered return 0x07 (assuming classic,
                               // mw, meta, nicer1, modern1, nicer++, modernLayered)
                               // +0x0100 for unicode
  CLUIF2_EXTRACOLUMNCOUNT = 3; // return max number of extra icon available to
                               // be set in main window
  CLUIF2_USEREXTRASTART   = 4; // return index of first 'advanced' image except
                               // Adv1 and Adv2
}
  // can only provide this flag to return the following set of caps, the strings
  // show the database setting/type to store the list option, changing the value
  // does not reflect what the change is, i.e. ontop can only be affected with
  // a call to SetWindowPos()
  CLUICAPS_FLAGS1         = 0;
  // empty groups aren't shown, 'CList/HideEmptyGroups' (byte) [changes make the list reload]
  CLUIF_HIDEEMPTYGROUPS   = 1;
  // groups can be disabled, lists can be merged into one seamlessly, (byte) 'CList/UseGroups'
  CLUIF_DISABLEGROUPS     = 2;
  // list can be displayed 'on top' of all other windows, 4 (byte) 'CList/OnTop'
  CLUIF_HASONTOPOPTION    = 4;
  // can disappear after a while of inactive use,
  // (byte) 'CList/AutoHide' (word) 'CList/HideTime'
  CLUIF_HASAUTOHIDEOPTION = 8;

  CLUICAPS_FLAGS2 = 1; // Returns info about extra icons
                       // HIWORD is the first extra icon number, LOWORD is the extra icons count

//LPARAMS for CLUICAPS_FLAGS1 
  CLUIF2_PLUGININFO = 1; //returns pointer to plugininfo
  CLUIF2_CLISTTYPE  = 2; // the genaration of list in chronologic 
// modern layered return 0x07
// (assuming classic, mw, meta, nicer1, modern1, nicer++, modernLayered)
// +0x0100 for unicode
  CLUIF2_EXTRACOLUMNCOUNT = 3; // return max number of extra icon available to be set in main window
  CLUIF2_USEREXTRASTART   = 4; // return index of first 'advanced' image except Adv1 and Adv2

  MS_CLUI_GETCAPS:PAnsiChar = 'CLUI/GetCaps';

  {
    wParam : HCONTACT
    lParam : MAKELPARAM(screenX, screenY)
    Affect : A contact is being dragged outside the main window
    Return : return [non zero] to show the drag cursor as "accepting" the drag
             or zero to show the circle/slash 'not allowed'
    Version: v0.1.2.0+
  }
  ME_CLUI_CONTACTDRAGGING:PAnsiChar = 'CLUI/ContactDragging';

  {
    wParam : HCONTACT
    lParam : MAKELPARAM(screenX, screenY)
    Affect : a contact has just been dropped outside the main window, see notes
    Notes  : return non zero to stop other hooks processing this event.
    Version: v0.1.2.0+
  }
  ME_CLUI_CONTACTDROPPED:PAnsiChar = 'CLUI/ContactDropped';

  {
    wParam : HCONTACT
    lParam : 0
    Affect : A contact that *was* being dragged outside the main window
             has gone back to the main window
    Return : always return 0
    Version: v0.1.2.1+
  }
  ME_CLUI_CONTACTDRAGSTOP:PAnsiChar = 'CLUI/ContactDragStop';

// return TRUE if Clist Module Support Metacontacts
  ME_CLUI_METASUPPORT:PAnsiChar = 'CLUI/MetaContactSupport';

// return pointer to PLUGININFO structure
//  MS_CLIST_GETCLISTCAPS = 'CList/GetCaps';

{$ENDIF}